package moodish.server;

import java.util.LinkedList;

/**
 * <p>Esta classe cria uma inst�ncia do Utilizador, que tem como atributos o seu nickname,
 * o mood actual, e a sua lista de amigos.</p>
 * 
 * @author Rodrigo Correia
 * @author Liliana Rocha
 * @author Antonio Raimundo
 */
public class User {

    private String nickname = "";
    private LinkedList<User> my_friends = new LinkedList<User>();
    private LinkedList<User> friend_of = new LinkedList<User>();
    private String Mood = "";
    
    /**
     * <p>Este construtor cria uma nova inst�ncia do Utilizador, usando como argumento
     * o nickname do utilizador.</p>
     * @param nick - Representa o nickname do Utilizador.
     */
    public User(String nick){
        this.nickname = nick;
        this.Mood = "Connected";
    }
    
    /**
     * <p>Adiciona o <b>user</b> � lista de amigos do Utilizador.</p>
     * @param user - O nome do user que quer adicionar.
     */
    public void addFriend(User user){
        my_friends.add(user);
    }
    
    public void addFriendOf(User user){
        friend_of.add(user);
    }
    
    /**
     * <p>Remove o <b>user</b> da lista de amigos do Utilizador.</p>
     * @param user - O nome do user que quer remover.
     */
    public void rmvFriend(User user){
        my_friends.remove(user);
    }
    
    public void rmvFriendOf(User user){
        friend_of.remove(user);
    }
    
    /**
     * <p>Devolve o nickname do Utilizador.</p>
     * @return nickname - Nickname do Utilizador.
     */
    public String getNickname() {
        return nickname;
    }
    
    /**
     * <p>Devolve a lista de amigos do Utilizador.</p>
     * @return friends - Representa a lista.
     */
    public LinkedList<User> getFriends() {
        return my_friends;
    }
    
    public LinkedList<User> getFriendsOf(){
        return friend_of;
    }
    
    /**
     * <p>Devolve o 'mood' actual do Utilizador.</p>
     * @return Mood - Representa o Mood.
     */
    public String getMood() {
        return Mood;
    }

    /**
     * <p>Altera o 'mood' do Utilizador.</p>
     * @param Mood - Representa o Mood.
     */
    public void setMood(String Mood) {
        this.Mood = Mood;
    }
}